package com.tianqi.common.enums;

/**
 * 卦的基础单元
 *
 * @author zhangzedi
 * @date 2023/8/19 13:11
 **/
public enum BaseGuaEnum {
	QIAN(1, "111", "乾"),
	DUI(2, "011", "兑"),
	LI(3, "101", "离"),
	ZHEN(4, "001", "震"),
	XUN(5, "110", "巽"),
	KAN(6, "010", "坎"),
	GEN(7, "100", "艮"),
	KUN(8, "000", "坤");

	/**
	 * 位置
	 */
	private Integer index;

	/**
	 * 组成的三个爻，从上往下，1-阳。0-阴
	 */
	private String yaos;

	/**
	 * 名称
	 */
	private String name;

	BaseGuaEnum(Integer index, String yaos, String name) {
		this.index = index;
		this.yaos = yaos;
		this.name = name;
	}

	public String getYaos() {
		return yaos;
	}

	public Integer getIndex() {
		return index;
	}

	/**
	 * 根据合并的爻查询基础卦
	 *
	 * @param yaos
	 * @return
	 */
	public static BaseGuaEnum findGuaByYaos(String yaos) {
		BaseGuaEnum[] values = BaseGuaEnum.values();
		for (BaseGuaEnum baseGuaEnum : values) {
			if (yaos.equals(baseGuaEnum.getYaos())) {
				return baseGuaEnum;
			}
		}
		return null;
	}

	/**
	 * 根据各个爻查询基础卦，从上往下数
	 *
	 * @param yao1
	 * @param yao2
	 * @param yao3
	 * @return
	 */
	public static BaseGuaEnum findGuaByYao(String yao1, String yao2, String yao3) {
		BaseGuaEnum[] values = BaseGuaEnum.values();
		// 组合三个爻
		String yao = yao1 + yao2 + yao3;
		for (BaseGuaEnum baseGuaEnum : values) {
			if (yao.equals(baseGuaEnum.getYaos())) {
				return baseGuaEnum;
			}
		}
		return null;
	}

	/**
	 * 根据坐标获取基础卦
	 *
	 * @param index
	 * @return
	 */
	public static BaseGuaEnum findGuaByIndex(Integer index) {
		BaseGuaEnum[] values = BaseGuaEnum.values();

		for (BaseGuaEnum baseGuaEnum : values) {
			if (index.equals(baseGuaEnum.getIndex())) {
				return baseGuaEnum;
			}
		}
		return null;
	}
}
